home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / STK100.ZIP / FINDSB.PAS < prev    next >
Pascal/Delphi Source File  |  1995-02-02  |  5KB  |  206 lines

  1. {******************************************************************************
  2. File:                          findsb.pas
  3. Tab stops:                 every 2 collumns
  4. Project:                     FINDSB utility
  5. Copyright:                 1994 DiamondWare, Ltd.  All rights reserved.
  6. Written:                     Keith Weiner & Erik Lorenzen
  7. Pascal Conversion: David A. Johndrow
  8. Purpose:           Example code to autodetect and print out the sound hardware
  9. History:                     KW 10/21/94 Started
  10.                                      DJ 11/11/94 Converted
  11.                                      EL 02/02/95 Cleaned up & Finalized
  12. ******************************************************************************}
  13.  
  14.  
  15.  
  16. Program FindSb;
  17.  
  18. uses crt,dws;
  19.  
  20.  
  21.  
  22. Var
  23.     dov:    dws_DOPTR;
  24.     dres: dws_DRPTR;
  25.  
  26.  
  27.  
  28. Procedure DisplayError;
  29. begin
  30.     case dws_ErrNo of
  31.         (*
  32.          . Note that only those errors which could occur when calling
  33.          . dws_DetectHardWare are checked for.
  34.         *)
  35.         dws_ALREADYINITTED:
  36.         begin
  37.             (*
  38.              . If we get here, it means you've called dws_Init() already.  Calling
  39.              . dws_DetectHardWare() at this point would cause zillions of
  40.              . problems if we let the call through.
  41.             *)
  42.             writeln('The STK was already initialized\n');
  43.         end;
  44.  
  45.         dws_DetectHardware_UNSTABLESYSTEM:
  46.         begin
  47.             (*
  48.              . Please report it to DiamondWare if you get here!
  49.              .
  50.              . Ideally, you would disable control-C here, so that the user can't
  51.              . hit control-alt-delete, causing SmartDrive to flush its (possibly
  52.              . currupt) buffers.
  53.             *)
  54.             writeln('The system is unstable!');
  55.             writeln('Please power down now!');
  56.  
  57.             while (1 = 1) do
  58.             begin
  59.             end;
  60.         end;
  61.  
  62.         (*
  63.          . The following three errors are USER/PROGRAMMER errors.  You forgot
  64.          . to fill the cardtyp struct full of -1's (except in those fields
  65.          . you intended to override, or the user (upon the unlikly event that
  66.          . the STK was unable to find a card) gave you a bad overide value.
  67.         *)
  68.         dws_DetectHardware_BADBASEPORT:
  69.         begin
  70.             (*
  71.              . You set dov.baseport to a bad value, or
  72.              . didn't fill it with a -1.
  73.             *)
  74.             writeln('Bad port address');
  75.         end;
  76.  
  77.         dws_DetectHardware_BADDMA:
  78.         begin
  79.             (*
  80.              . You set dov.digdma to a bad value, or
  81.              . didn't fill it with a -1.
  82.             *)
  83.             writeln('Bad DMA channel');
  84.         end;
  85.  
  86.         dws_DetectHardware_BADIRQ:
  87.         begin
  88.             (*
  89.              . You set dov.digirq to a bad value, or
  90.              . didn't fill it with a -1.
  91.             *)
  92.             writeln('Bad IRQ level');
  93.         end;
  94.  
  95.         else
  96.         begin
  97.             (*
  98.              . This should never occur and probably won't affect sound
  99.              . play(?).  If it happens please contact DiamondWare.
  100.             *)
  101.             writeln('I am confused!  Where am I?  HOW DID I GET HERE????');
  102.             writeln('The ERROR number is:',dws_ErrNo);
  103.         end;
  104.  
  105.     end;
  106. end;
  107.  
  108.  
  109. Function HVal(i: word): char;
  110. begin
  111.     if (i < 10) then
  112.     begin
  113.         HVal := chr(i+48);
  114.     end
  115.     else
  116.     begin
  117.         HVal := chr(i+55);
  118.     end;
  119. end;
  120.  
  121.  
  122. Function HexStr(d: word): string;
  123. Var
  124.     s: string;
  125.  
  126. begin
  127.     s := '    ';
  128.  
  129.     s[4] := HVal(d mod 16);
  130.     s[3] := HVal((d div 16) mod 16);
  131.     s[2] := HVal((d div 256) mod 16);
  132.     s[1] := HVal((d div 4096) mod 16);
  133.  
  134.     while (s[1] = '0') and (length(s) > 1) do
  135.     begin
  136.         Delete(s,1,1);
  137.     end;
  138.  
  139.     HexStr := s;
  140. end;
  141.  
  142.  
  143.  
  144. begin
  145.     writeln;
  146.     writeln('FINDSB is Copyright 1994, DiamondWare, Ltd.');
  147.     writeln('All rights reserved.');
  148.     writeln;
  149.     writeln;
  150.  
  151.     new(dov);
  152.     new(dres);
  153.  
  154.     (*
  155.      . We need to set every field to -1 in dws_DETECTOVERRIDES struct; this
  156.      . tells the STK to autodetect everything.    Any other value
  157.      . overrides the autodetect routine, and will be accepted on
  158.      . faith, though the STK will verify it if possible.
  159.     *)
  160.     dov^.baseport := 65535;
  161.     dov^.digdma     := 65535;
  162.     dov^.digirq     := 65535;
  163.  
  164.     if (dws_DetectHardWare(dov, dres) = 0) then
  165.     begin
  166.         DisplayError;
  167.         halt(65535);
  168.     end;
  169.  
  170.     if (dres^.capability and (dws_capability_DIG or dws_capability_FM) <> 0) then
  171.     begin
  172.         writeln('Base port is ',HexStr(dres^.baseport),' hex');
  173.         writeln('');
  174.  
  175.         if (dres^.mixtyp <> 1) then
  176.         begin
  177.             writeln('The sound hardware supports mixing.');
  178.             writeln('');
  179.         end
  180.         else
  181.         begin
  182.             writeln('The sound hardware does not support mixing.');
  183.             writeln('');
  184.         end;
  185.  
  186.         if ((dres^.capability and dws_capability_FM) = dws_capability_FM) then
  187.         begin
  188.             writeln('The sound hardware supports FM music playback.');
  189.             writeln;
  190.         end;
  191.  
  192.         if ((dres^.capability and dws_capability_DIG) = dws_capability_DIG) then
  193.         begin
  194.             writeln('The sound hardware supports digitized sound playback.');
  195.             writeln('The sound hardware uses DMA channel ',dres^.digdma,' and IRQ level ',dres^.digirq,'.');
  196.             writeln;
  197.         end;
  198.     end
  199.     else
  200.     begin
  201.         writeln('No sound hardware detected.');
  202.         writeln;
  203.     end;
  204.  
  205. end.
  206.